package com.mazaiting.manager.convert;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mazaiting.manager.domain.entity.SysUser;
import com.mazaiting.manager.domain.form.UserForm;
import com.mazaiting.manager.domain.po.user.UserDetailPO;
import com.mazaiting.manager.domain.po.user.UserPO;
import com.mazaiting.manager.domain.vo.user.LoginUserVO;
import com.mazaiting.manager.domain.vo.user.SysUserVO;
import com.mazaiting.manager.domain.vo.user.UserDetailVO;
import org.mapstruct.Mapper;
import org.mapstruct.MappingConstants;
import org.mapstruct.MappingTarget;
import org.mapstruct.ReportingPolicy;

/**
 * 用户对象转换器
 */
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface IUserConverter {

    /**
     * 系统用户信息转换为登录用户页面实体
     *
     * @param entity 实体
     * @return 登录用户页面实体
     */
    LoginUserVO entity2LoginUser(SysUser entity);

    /**
     * 实体转换
     * @param po 持久化对象
     * @return VO
     */
    Page<SysUserVO> po2Vo(Page<UserPO> po);

    /**
     * 用户详细信息持久化对象转换为 用户详细信息 VO
     * @param userDetailPO 用户详细信息持久化对象
     * @return 用户详细信息 VO
     */
    UserDetailVO po2Vo(UserDetailPO userDetailPO);

    /**
     * 将用户表单数据设置到用户数据库实体中
     * @param userForm 用户表单数据
     * @param sysUser 用户数据库实体
     */
    void form2Entity(UserForm userForm, @MappingTarget SysUser sysUser);

    /**
     * 将表单数据转换为数据库实体
     * @param userForm 表单数据
     * @return 数据库实体
     */
    SysUser form2Entity(UserForm userForm);
}